package cn.com.scitc.swl.rssnews.fragment;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
import cn.com.scitc.swl.rssnews.R;
import cn.com.scitc.swl.rssnews.adapter.NewsListAdapter;
import cn.com.scitc.swl.rssnews.constants.CommonUrl;
import cn.com.scitc.swl.rssnews.model.News;
import cn.com.scitc.swl.rssnews.model.NewsList;
import cn.com.scitc.swl.rssnews.pullrefresh.PullToRefreshBase;
import cn.com.scitc.swl.rssnews.pullrefresh.PullToRefreshBase.OnRefreshListener;
import cn.com.scitc.swl.rssnews.pullrefresh.PullToRefreshListView;
import cn.com.scitc.swl.rssnews.service.HttpUtils;
public class NewsFragment extends Fragment {
/** 请求页码 */
private int pageNo = 1;
/** 下拉刷新 */
private PullToRefreshListView mPullToRefreshListView;
private ListView mListView;
/** 新闻数据 */
private ArrayList<News> mNewsData = new ArrayList<News>();
private NewsListAdapter adapter;
/** 设置新闻列表 */
public final static int SET_NEWSLIST = 0;
public final static int GET_FAILED = 1;
/** 格式时间 */
@SuppressLint("SimpleDateFormat")
private SimpleDateFormat mDateFormat = new SimpleDateFormat("MM-dd HH:mm");
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
adapter = new NewsListAdapter(getActivity());
super.onCreate(savedInstanceState);
}
@SuppressLint("InflateParams")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
@SuppressWarnings("unused")
View view = LayoutInflater.from(getActivity()).inflate(
R.layout.news_fragment, null);
mPullToRefreshListView = new PullToRefreshListView(getActivity());
mPullToRefreshListView.setPullLoadEnabled(false);
mPullToRefreshListView.setScrollLoadEnabled(true);
mPullToRefreshListView
.setOnRefreshListener(new OnRefreshListener<ListView>() {
@Override
public void onPullDownToRefresh(
PullToRefreshBase<ListView> refreshView) {
// Thread myThread = new GetNewsThread();
// myThread.start();
if (isOnline()) {
pageNo = 1;
new GetNewsTask().execute(pageNo);
} else {
noNetwork();
}
}
@Override
public void onPullUpToRefresh(
PullToRefreshBase<ListView> refreshView) {
// TODO Auto-generated method stub
if (isOnline()) {
Toast.makeText(getActivity(), "下一页",
Toast.LENGTH_SHORT).show();
new GetNewsTask().execute(pageNo);
} else {
noNetwork();
}
}
});
mPullToRefreshListView.doPullRefreshing(true, 500);
mListView = mPullToRefreshListView.getRefreshableView();
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view,
int position, long arg3) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.putExtra("newsId", mNewsData.get(position).id);
intent.putExtra("newsImg", mNewsData.get(position).img);
intent.setClass(getActivity(), NewsDetailActivity.class);
startActivity(intent);
}
});
return mPullToRefreshListView;
}
/**
* 获取新闻的异步任务
*
* @author ASHENG
*
*/
public class GetNewsTask extends AsyncTask<Integer, Void, ArrayList<News>> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected ArrayList<News> doInBackground(Integer... arg0) {
// TODO Auto-generated method stub
String jsonString = HttpUtils.httpPost(CommonUrl.NES_LIST_PATH
+ "page=" + arg0[0], "utf-8");
if (jsonString != null && !TextUtils.isEmpty(jsonString)) {
NewsList newsList = NewsList.parse(jsonString);
ArrayList<News> news = newsList.newsList;
return news;
} else {
return null;
}
}
@Override
protected void onPostExecute(ArrayList<News> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (result != null) {
if (pageNo == 1) {
mNewsData = result;
} else {
mNewsData.addAll(result);
}
adapter.setData(mNewsData);
System.out.println("page===>" + pageNo);
if (pageNo == 1) {
mListView.setAdapter(adapter);
}
adapter.notifyDataSetChanged();
// Toast.makeText(getActivity(), "加载数据成功", Toast.LENGTH_SHORT)
// .show();
pageNo++;
}
mPullToRefreshListView.onPullDownRefreshComplete();
mPullToRefreshListView.onPullUpRefreshComplete();
mPullToRefreshListView.setHasMoreData(true);
setLastUpdateTime();
}
}
/**
* 此方法表示fragment是否可见
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
// TODO Auto-generated method stub
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
if (mNewsData == null && mNewsData.size() == 0) {
Toast.makeText(getActivity(), "数据为空", Toast.LENGTH_SHORT)
.show();
pageNo = 1;
new GetNewsTask().execute(pageNo);
}
}
}
/*
* 获取刷新时间
*/
private void setLastUpdateTime() {
String text = formatDateTime(System.currentTimeMillis());
mPullToRefreshListView.setLastUpdatedLabel(text);
}
private String formatDateTime(long time) {
if (0 == time) {
return "";
}
return mDateFormat.format(new Date(time));
}
/**
* Check the Network Connection
*
* @return
*/
public boolean isOnline() {
ConnectivityManager connMgr = (ConnectivityManager) getActivity()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
return (networkInfo != null && networkInfo.isConnected());
}
/**
* No Network Connection
*/
public void noNetwork() {
Toast.makeText(getActivity(), "当前无网络", Toast.LENGTH_SHORT).show();
mPullToRefreshListView.onPullDownRefreshComplete();
mPullToRefreshListView.onPullUpRefreshComplete();
mPullToRefreshListView.setHasMoreData(true);
}
}